﻿using System;
using System.Data;
using SiGeCoPre.Presupuesto_DAO;
using SiGeCoPre.Presupuesto_DTO;
using SiGeCoPre.Presupuesto_Entities;
using SiGeCoPre.Presupuesto_Factory;
using SiGeCoPre.Presupuesto_Excepcion;
using SiGeCoPre.Presupuesto_Util;

namespace SiGeCoPre.Presupuesto_BLIMPL
{
    /// <summary>
    /// Clase que implementa BLMantenimiento
    /// </summary>
    class BLIMPLMantenimiento:Presupuesto_BL.BLMantenimiento
    {
        DAOMantenimiento createMantenimiento = DAOFactoryPresupuesto.createMantenimiento();

        /// <summary>
        /// Guarda una tarea de mantenimiento
        /// </summary>
        /// <param name="m">Objeto con los datos de la tarea a guardar</param>
        /// <returns>Devuelve true si fue ingresado correctamente o false si falló</returns>
        public bool saveMantenimiento(mantenimientoDTO m)
        {
            Boolean correcto = false;

            try
            {
                Boolean insertado = createMantenimiento.saveMantenimiento(m.NombreTarea, m.Descripcion, m.Activo);

                if (insertado)
                {
                    correcto = true;
                }
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Modifica una tarea de mantenimiento
        /// </summary>
        /// <param name="m">Objeto con los datos de la tarea a modificar</param>
        /// <param name="id">Determina la tarea a modificar</param>
        /// <returns>Devuelve true si fue modificada correctamente o false si falló</returns>
        public bool updateMantenimiento(mantenimientoDTO m, int id)
        {
            Boolean correcto = false;

            try
            {
                Boolean modificado = createMantenimiento.updateMantenimiento(m.NombreTarea, m.Descripcion, m.Activo, id);

                if (modificado)
                {
                    correcto = true;
                }
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Elimina una tarea de mantenimiento
        /// </summary>
        /// <param name="id">Determina la tarea a eliminar</param>
        /// <returns>Devuelve true si fue eliminada correctamente o false si falló</returns>
        public bool deleteMantenimiento(int id)
        {
            Boolean correcto = false;

            try
            {
                Boolean eliminado = createMantenimiento.deleteMantenimiento(id);

                if (eliminado)
                {
                    correcto = true;
                }
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Lista las tareas de mantenimiento
        /// </summary>
        /// <returns>Devuelve una tabla con las tareas</returns>
        public DataTable getAllMantenimiento()
        {
            DataTable tareas = null;

            try
            {
                DataTable man = createMantenimiento.getAllMantenimiento();

                if (null != man)
                {
                    tareas = man;
                }
            }
            catch (Exception ex)
            {

                tareas = null;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return tareas;
        }

        /// <summary>
        /// Obtiene una tarea de mantenimiento
        /// </summary>
        /// <param name="nombre_tarea">Determina la tarea a obtener</param>
        /// <returns>Devuelve un objeto mantenimiento</returns>
        public mantenimientoDTO getMantenimiento(string nombre_tarea)
        {
            mantenimientoDTO m = null;

            try
            {

                mantenimiento ma = createMantenimiento.getMantenimiento(nombre_tarea);

                if (null != ma)
                {
                    m = new mantenimientoDTO();

                    m.NombreTarea = ma.NombreTarea;
                    m.ID = ma.ID;
                    m.Descripcion = ma.Descripcion;
                    m.Activo = ma.Activo;
                }
            }
            catch (Exception ex)
            {
                
                m = null;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return m;
        }
    }
}
